/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package praticas.projeto.fachada;

import java.io.IOException;
import praticas.projeto.FipAmigos.FipAmigos;
import praticas.projeto.exceptions.AmigoRepetidoException;
import praticas.projeto.exceptions.AtributoNaoPreenchidoException;
import praticas.projeto.exceptions.ContaRepetidaException;
import praticas.projeto.exceptions.LoginInvalidoException;
import praticas.projeto.exceptions.SenhaInvalidaException;
import praticas.projeto.exceptions.UsuarioNaoCadastradoException;

/**
 *
 * @author Windows
 */
public class Fachada {
    //Variavel do tipo FipAmigos
    private FipAmigos fa;
    //Contrutor da classe fachada
    //criando um objeto do tipo FipAmigos
    public Fachada() {
        this.fa = new FipAmigos();
    }
    /*
     * Metodo criaUsuario passando login, senha e nome como parametros;
     * Adiciona se o login não for igual a null nem a vazio;
     * Se o usuario ja não está adicionado no sistema;
     * e se a senha for dierente de null ou de vazio e conter acima de 5 caracteres;
     */
    public void criarUsuario(String login, String senha, String nome) throws SenhaInvalidaException, ContaRepetidaException, LoginInvalidoException, IOException {
        this.fa.criarUsuario(login, senha, nome);
    }
    /*
     * Retorna o nome do usuario do login passado como parametro
     * mas se satisfazer as seguintes condições
     * se o login passado não for null nem vazio
     * ou se o login já estiver cadastrado no sistema!
     */

    public String getNomeUsuario(String login) throws LoginInvalidoException, UsuarioNaoCadastradoException, IOException, ClassNotFoundException {
        return this.fa.getNomeUsuario(login);

    }
    /*
     * Retorna a descrição de um usuario se somente se a descrição não for nula nem vazia!
     * se for lança uma exceção Atributo não preenchido
     * Retorna a descrição do usuario passando o login e senha e verifica na lista de usuarios!
     */
    public String getDescricao(String login, String senha) throws AtributoNaoPreenchidoException {
        return this.fa.getDescricao(login, senha);
    }
    /*
     * Retorna o estado civil do usuario, se somente se o estado civil não for nulo nem vazio
     * se for lança uma exceção Atributo não preenchido
     * Retorna o estado civil de um usuario passando o login e a senha como parametros e verifica na lista de usuarios;
     */
    public String getEstadoCivil(String login, String senha) throws AtributoNaoPreenchidoException, SenhaInvalidaException {
        return this.fa.getEstadoCivil(login, senha);
    }
    /*
     * Retorna o aniversario do usuario, se somente se o aniversario não for nulo nem vazio;
     * se for lança uma exceção Atributo não preenchido
     * Retorna o aniversario de um usuario passando o login e senha como parametros e verifica na lista de usuarios cadastrados no sistema;
     */
    public String getAniversario(String login, String senha) throws AtributoNaoPreenchidoException, SenhaInvalidaException {
        return this.fa.getAniversario(login, senha);
    }
    /*
     * Retorna a cidade natal de um ususuario, se somente se a cidade não for nula nem vazia
     * se for lança uma exceção Atributo não preenchido
     * Retorna a cidade natal de um usuario passando como parametro
     * o login e a senha, e verifica na lista de usuarios cadastrados no sistema;
     */
    public String getCidadeNatal(String login, String senha) throws AtributoNaoPreenchidoException, SenhaInvalidaException {
        return this.fa.getCidadeNatal(login, senha);
    }
    /*
     * Metodo que retorna verdadeiro se na lista de usuarios contem o login passado como parametro
     * ou falso se não contiver na lista de ususarios do sistema;
     */
    public boolean contemUsuario(String login) {
        return this.fa.contemUsuario(login);

    }
    /*
     * Metodo para edição da descrição de um usuario, passando como parametro login, senha e a decrição
     * verifica se contem o usuario e se a senha é valida
     * se não for lança duas exceções
     * UsuarioNaoCadastrado e SenhaInvalida
     * Caso contrario edita a decrição
     */
    public void editarDescricao(String login, String senha, String descricao) throws UsuarioNaoCadastradoException, SenhaInvalidaException {
        this.fa.editarDescricao(login, senha, descricao);
    }
    /*
     * Metodo para edição da cidade natal de um usuario, passando como parametro login, senha e a cidade natal
     * verifica se contem o usuario e se a senha é valida
     * se não for lança duas exceções
     * UsuarioNaoCadastrado e SenhaInvalida
     * Caso contrario edita a cidade natal
     */
    public void editarCidadeNatal(String login, String senha, String cidade) throws UsuarioNaoCadastradoException, SenhaInvalidaException {
        this.fa.editarCidadeNatal(login, senha, cidade);
    }
    /*
     * Metodo para edição do aniversario de um usuario, passando como parametro login, senha e a data
     * verifica se contem o usuario e se a senha é valida
     * se não for lança duas exceções
     * UsuarioNaoCadastrado e SenhaInvalida
     * Caso contrario edita o aniversario
     */
    public void editarAniversario(String login, String senha, String data) throws UsuarioNaoCadastradoException, SenhaInvalidaException {
        this.fa.editarAniversario(login, senha, data);
    }
    /*
     * Metodo para edição do estado civil de um usuario, passando como parametro login, senha e o estado
     * verifica se contem o usuario e se a senha é valida
     * se não for lança duas exceções
     * UsuarioNaoCadastrado e SenhaInvalida
     * Caso contrario edita o estado civil
     */
    public void editarEstadoCivil(String login, String senha, String estado) throws UsuarioNaoCadastradoException, SenhaInvalidaException {
        this.fa.editarEstadoCivil(login, senha, estado);
    }
    /*
     * Metodo que verifica se um usuario é amigo do outro passando o login e o amigo
     * se o amigo contiver na lista de amigos do usuarios
     * retorna verdadeiro
     * caso contrario falso!
     */
    public boolean ehAmigo(String login, String amigo){
          return this.fa.ehAmigo(login, amigo);
      }
    /*
     * Metodo de adição de amigos, passando como parametro o login do usuario e o amigo que irá ser adicionado a lista do login passado!
     * Verifica antes se os o usuario e o amigo estao cadastrados, se não estiverem lança uma exceção: UsuarioNaoCadastrado
     * Verifica se o usuario login do usuario é igual ao do amigo, se for lança uma exceção: ContaRepetida
     * Verifica se o amigo passado ja está na lista do usuario, se estiver lança a exceção: AmigoRepetido
     * verifica se o amigo ja contem na lista do usuario que esta na lista de pendentes e adiciona apenas quando o outro tambem o adicionar!
     * Adiciona apenas se ambos estiverem na lista de pendentes um do outro!
     Caso contrario se estiver tudo OK, adiciona o usuario na lista do amigo e o amigo na lista do usuario!
     */
    public void adicionarAmigo(String id, String amigo) throws AmigoRepetidoException, UsuarioNaoCadastradoException, ContaRepetidaException {
        this.fa.adicionarAmigo(id, amigo);
      }
    /*
     * Retorna a lista de amigos do usuario que contem o login passado como parametro!
     */
    public String getAmigos(String login){
        return this.fa.getAmigos(login);
    }
    /*
     * Metodo de remoção de amigos, passando como parametro o login do usuario e o amigo que irá ser removido da lista do login passado!
     * Verifica antes se os o usuario e o amigo estao cadastrados, se não estiverem lança uma exceção: UsuarioNaoCadastrado          
     * verifica se o amigo que for removido está na lista do usuario, senão estiver lança a exceção: UsuarioNaoCadastrado com a mensagem: "Usuários não são amigos"
     Caso contrario se estiver tudo OK, remove o usuario na lista do amigo e o amigo na lista do usuario!
     */
    public void removerAmizade(String id, String amigo) throws UsuarioNaoCadastradoException{
        this.fa.removerAmizade(id, amigo);
    }
    /*
     * Encerra O sistema!
     */

     public void encerrarSistema() throws IOException, ClassNotFoundException {
         this.fa.encerrarSistema();
     }


}
